package cn.yzgy.yzgyoa.common.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * <p>
 * 系统异常告警，在系统遇到不正常数据时，会通过此表进行记录
 * </p>
 *
 * @author Yqsen
 * @since 2020-04-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_alarm")
public class SysAlarm extends Model<SysAlarm> {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 异常类
     */
    private String className;

    /**
     * 异常方法
     */
    private String methodName;

    /**
     * 异常内容
     */
    private String errDesc;

    /**
     * 产生时间
     */
    private Date generateTime;

    @Override
    public boolean insert() {
        return insert(2);
    }

    /**
     * 提取调用者时，手动指定层级
     * @param callLevel 调用层级
     * @return 是否成功
     */
    public boolean insert(int callLevel) {
        // 设置产生时间
        setGenerateTime(new Date());
        // 设置调用方法名
        setMethodName(Thread.currentThread().getStackTrace()[callLevel].getMethodName());
        // 设置调用类名
        setClassName(Thread.currentThread().getStackTrace()[callLevel].getClassName());
        return super.insert();
    }

    @Override
    protected Serializable pkVal() {
        return this.id;
    }

}
